home *** CD-ROM | disk | FTP | other *** search
- /*
- * name: addrect
- *
- * description: add rectangle r to the obscured list of new layer lp
- * iff it is unique. (no spelling mistake)
- *
- * synopsis: addrect (r, lp)
- * struct rectangle *r;
- * struct layer *lp;
- *
- * globals: obs (r/w)
- * endobs (r/w)
- *
- * calls: malloc (libc)
- *
- * called by: addpiece (addpiece.c)
- * addobs (addobs.c)
- */
- #include "layers.h"
-
- extern struct obscured *obs;
- extern struct obscured *endobs;
-
- addrect (r, lp)
- struct rectangle *r;
- struct layer *lp; /* layer currently occupying rectangle r
- on screen */
- {
- struct obscured *op;
- struct obscured *newop;
-
- char *malloc ();
-
- for (op = obs; op != null; op = op -> ob_next)/* op = each element of obs */
- if ((op -> ob_rect.origin.x == r -> origin.x) &&
- (op -> ob_rect.origin.y == r -> origin.y))
- return; /* not unique */
- /*
- * newop = new struct obscured
- */
- newop = (struct obscured *) malloc ((unsigned) sizeof (struct obscured));
- newop -> ob_rect.origin.x = r -> origin.x;
- newop -> ob_rect.origin.y = r -> origin.x;
- newop -> ob_rect.corner.x = r -> corner.x;
- newop -> ob_rect.corner.y = r -> corner.y;
- newop -> ob_obs = lp;
- newop -> ob_bmap = null;
- /*
- * link newop into end of obs list
- */
- if (lp -> ly_endobs != null)
- /*
- * thread new obscured node onto tail of obscured list
- */
- lp -> ly_endobs -> ob_next = newop;
- else
- /*
- * this is the first obscurred rectangle in layer
- */
- lp -> ly_obs = newop;
- /*
- * link new node to previous node
- * set next to null (this is the last node on list)
- * set layer tail pointer to new node
- */
- newop -> ob_prev = lp -> ly_endobs;
- newop -> ob_next = null;
- lp -> ly_endobs = newop;
- }